package q230_kthSmallest;

import CommonClass.Common.TreeNode;

import java.util.Deque;
import java.util.LinkedList;

public class Solution_1 {
    /*
    此题实际上就是中序遍历简单加一个k值判断
    当k=0时，返回节点值即可
     */
    public int kthSmallest(TreeNode root, int k) {
        Deque<TreeNode> stack = new LinkedList<TreeNode>();
        TreeNode node = root;

        while (!stack.isEmpty() || node != null){
            // 不停的将左子节点加入栈中
            while (node != null) {
                stack.push(node);
                node = node.left;
            }
            // 开始弹出节点
            // 此时弹出的节点也就是最左的节点了
            // 假设这个节点没有子节点 在这个节点后就会弹出根节点
            // 在这之后就会加入根节点
            node = stack.pop();
            k--;
            if (k == 0) {
                return node.val;
            }
            // res.add(node.val);
            // 而假设根节点有右节点 就会加入右节点
            // 也就满足了左 根 右的顺序
            node = node.right;
        }

        return 0;
    }
}
